﻿using System.Windows.Media;


namespace HandyControl.Data;

/// <summary>
///     颜色范围
/// </summary>
public class ColorRange : IValueRange<Color>
{
    private Color _start;

    public Color Start
    {
        get => _start;
        set
        {
            _start = value;
            Update();
        }
    }

    private Color _end;

    public Color End
    {
        get => _end;
        set
        {
            _end = value;
            Update();
        }
    }

    /// <summary>
    ///     颜色差值
    /// </summary>
    private readonly int[] _subColorArr = new int[4];

    /// <summary>
    ///     更新
    /// </summary>
    private void Update()
    {
        _subColorArr[0] = _start.A - _end.A;
        _subColorArr[1] = _start.R - _end.R;
        _subColorArr[2] = _start.G - _end.G;
        _subColorArr[3] = _start.B - _end.B;
    }

    /// <summary>
    ///     获取指定比例处的颜色
    /// </summary>
    /// <param name="range">范围（0-1）</param>
    /// <returns></returns>
    public Color GetColor(double range)
    {
        if (range < 0 || range > 1) return default;
        return Color.FromArgb((byte) (_start.A - _subColorArr[0] * range), (byte) (_start.R - _subColorArr[1] * range),
            (byte) (_start.G - _subColorArr[2] * range), (byte) (_start.B - _subColorArr[3] * range));
    }
}
